function UploadFormView(controller) {
	View.call(this, controller);
	
	this.addView = function() {
		
		var form = this.uploadForm.getForm();
		form.target = "upload-result-frame";
		
		var formTable = document.createElement("table");
		formTable.className = "upload";
		var formTbody = document.createElement("tbody");
		
		var fileTr = document.createElement("tr");
		var fileLabelTd = document.createElement("td");
		fileLabelTd.className = "file-title";
		var fileLabel = document.createElement("label");
		fileLabel.className = "file";
		fileLabel.htmlFor = "uploaded-file";
		var fileLabelTextNode = document.createTextNode(Language.UploadFormView.file + ":");
		fileLabel.appendChild(fileLabelTextNode);
		fileLabelTd.appendChild(fileLabel);
		fileTr.appendChild(fileLabelTd);
		var fileInputTd = document.createElement("td");
		fileInputTd.className = "file-input";
		fileInputTd.appendChild(this.uploadForm.getFile());
		fileTr.appendChild(fileInputTd);
		formTbody.appendChild(fileTr);
		
		var titleTr = document.createElement("tr");
		var titleLabelTd = document.createElement("td");
		titleLabelTd.className = "title-title";
		var titleLabel = document.createElement("label");
		titleLabel.className = "title";
		titleLabel.htmlFor = "title";
		var titleLabelTextNode = document.createTextNode(Language.UploadFormView.title + ":");
		titleLabel.appendChild(titleLabelTextNode);
		titleLabelTd.appendChild(titleLabel);
		titleTr.appendChild(titleLabelTd);
		var titleInputTd = document.createElement("td");
		titleInputTd.className = "title-input";
		titleInputTd.appendChild(this.uploadForm.getTitle());
		titleTr.appendChild(titleInputTd);
		formTbody.appendChild(titleTr);
		
		var descriptionTr = document.createElement("tr");
		var descriptionLabelTd = document.createElement("td");
		descriptionLabelTd.className = "description-title";
		var descriptionLabel = document.createElement("label");
		descriptionLabel.className = "description";
		descriptionLabel.htmlFor = "description";
		descriptionLabelTextNode = document.createTextNode(Language.UploadFormView.description + ":");
		descriptionLabel.appendChild(descriptionLabelTextNode);
		descriptionLabelTd.appendChild(descriptionLabel);
		descriptionTr.appendChild(descriptionLabelTd);
		var descriptionInputTd = document.createElement("td");
		descriptionInputTd.className = "description-input";
		descriptionInputTd.appendChild(this.uploadForm.getDescription());
		descriptionTr.appendChild(descriptionInputTd);
		formTbody.appendChild(descriptionTr);
		
		var uploadButtonTr = document.createElement("tr");
		var emptyTd = document.createElement("td");
		uploadButtonTr.appendChild(emptyTd);
		var uploadButtonTd = document.createElement("td");
		this.uploadForm.getSubmit().onclick = (function(obj, method) {
			return function() {
				eval("obj." + method + ";");
			};
		})(this, "upload()");
		uploadButtonTd.appendChild(this.uploadForm.getSubmit());
		uploadButtonTr.appendChild(uploadButtonTd);
		formTbody.appendChild(uploadButtonTr);
		
		formTable.appendChild(formTbody);
		
		this.uploadForm.getForm().appendChild(formTable);
		this.setTag(form);
	};
	
	this.upload = function() {
		var uploadForm = this.getUploadForm();
		var uploadHandler = this.getUploadHandler();
		uploadHandler.upload(uploadForm);
	};
	
	this.getUploadForm = function() {
		return this.uploadForm;
	};
	
	this.setUploadForm = function(uploadForm) {
		this.uploadForm = uploadForm;
	};
	
	this.getUploadHandler = function() {
		return this.uploadHandler;
	};
	
	this.setUploadHandler = function(uploadHandler) {
		this.uploadHandler = uploadHandler;
	};
	
	this.uploadForm = null;
	this.uploadHandler = null;
	
	var uploadForm = new UploadForm();
	this.setUploadForm(uploadForm);
	this.addView();
}